﻿using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Windows.Data;
using  Acando.Dynamics.CRM.Silverlight.Library.CrmSdk;

namespace Acando.Dynamics.CRM.Silverlight.Library.Converter
{
    public class CrmDateTimeConverter : IValueConverter
    {

        #region IValueConverter Members

        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            CrmDateTime crmDate = value as CrmDateTime;
            if (value == null)
                return new DateTime();
            else if (targetType == typeof(string))
                return ((CrmDateTime)value).DateValue.ToString();
            else if (targetType == typeof(DateTime?))
            {
                if (value == null)
                    return new DateTime?();
                else if (crmDate.IsNullSpecified && crmDate.IsNull)
                    return new DateTime?();
                else
                    return new DateTime?(crmDate.DateValue);
            }
            else
                throw new NotSupportedException();
        }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            if (targetType == typeof(CrmDateTime))
            {
                if (value == null)
                {
                    return null;
                }
                else if (value is string)
                {
                    CrmDateTime d = new CrmDateTime();
                    d.DateValue = DateTime.Parse(value.ToString());
                    return d;
                }
                else if (value is DateTime?)
                {
                    DateTime? inDate = value as DateTime?;
                    if (inDate.HasValue)
                    {
                        CrmDateTime d = new CrmDateTime();
                        d.DateValue = inDate.Value;
                        return d;
                    }
                    else
                        return new CrmDateTime();
                }
                else
                    throw new NotSupportedException();
            }
            else
                throw new NotSupportedException();
        }

        #endregion
    }
}
